package fiuba.algo3.vista;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import fiuba.algo3.GeneradorAleatorio;
import fiuba.algo3.Partida;
import fiuba.algo3.Sospechoso;
import fiuba.algo3.mundo.Pais;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class VistaVentanas implements Vista{
	
	VentanaPrincipal v;
	PopUp popUp;
	JPanel botones;
	JPanel textoSuperior;
	JPanel textoCentral;
	List<JButton> bPrincipales;
	List<JButton> bInvestigacion;
	List<JButton> bViajar;
	List<JButton> bInterpol;
	List<JButton> bSexo;
	List<JButton> bHobby;
	List<JButton> bCabello;
	List<JButton> bSenia;
	List<JButton> bVehiculo;
	List<JButton> bFinPartida;
	JTextField textFieldJugador;
	JButton bOK;
	JButton bJugar;

	
	
	public VistaVentanas()
	{
		
		SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
            	
            	v = new VentanaPrincipal();
            	
                v.setVisible(true);
               
            }
		});
		
		crearPopUpFinDePartida();
		
	}
	
	public void crearPopUpFinDePartida()
	{
		SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
            	
            	popUp = new PopUp();

                
            }
		});
	}
	
	
	public void mostrarPopUpFinDePartida()
	{
		popUp.setVisible(true);
	}
	
	public void esconderPopUpFinDePartida()
	{
		popUp.setVisible(false);
        System.out.println("LLego a exconderlo");
	}

	@Override
	public void mostrarInicioJuego() {

		Container contentPane = v.getContentPane();
		contentPane.removeAll();
		
		textoCentral = new JPanel();
		textoCentral.setLayout(new GridLayout(4,1));
		

		
		JLabel titulo = new JLabel("*****|*|* ALGOTHIEF *|*|*****", JLabel.CENTER);
		JLabel textoInicioJuego = new JLabel("Bienvenido a AlgoThief. Policia al teclado, por favor identifiquese.", JLabel.CENTER);
		textFieldJugador = new JTextField("Jugador 1", JLabel.CENTER);

		textoCentral.add(titulo);
		textoCentral.add(textoInicioJuego);
		textoCentral.add(textFieldJugador);
		textoCentral.add(bOK);

		contentPane.add(textoCentral, BorderLayout.CENTER);
		

		contentPane.validate();
		contentPane.repaint();
		

	}

	@Override
	public void mostrarInfoPartida(Partida p) {
		
		Container contentPane = v.getContentPane();
		contentPane.removeAll();
		
			textoCentral = new JPanel();
			botones = new JPanel();
			textoCentral.setLayout(new GridLayout(5,1));

			JLabel t1 = new JLabel("Bienvenido, " +  p.obtenerNombreJugador() + ". Tu graduacion es: " + p.obtenerRangoJugador() + ". El caso se detalla a continuacion.", JLabel.CENTER);
			JLabel t2 = new JLabel("Ha ocurrido un robo en " + p.obtenerNombrePaisInicial() + ". El objeto robado fue identificado como " + p.obtenerNombreObjetoRobado() + ".", JLabel.CENTER);
			JLabel t3 = new JLabel("Un sospechoso de sexo " + p.obtenerSexoCulpable() + " ha sido visto en el lugar del crimen.", JLabel.CENTER);
			JLabel t4 = new JLabel("Tu mision es perseguir al ladron y arrestarlo antes del domingo a las 17hs. Buena suerte, " + p.obtenerNombreJugador(), JLabel.CENTER);
		
			
			
			textoCentral.add(t1);
			textoCentral.add(t2);
			textoCentral.add(t3);
			textoCentral.add(t4);
			textoCentral.add(bJugar);
			
			contentPane.add(textoCentral, BorderLayout.CENTER);


			contentPane.validate();
			contentPane.repaint();
			
	}

	@Override
	public void mostrarMenuPrincipal(Partida partida) {
		
		
		Container contentPane = v.getContentPane();
		contentPane.removeAll();
		
		
		botones = new JPanel();
		textoSuperior = new JPanel();
		textoCentral = new JPanel();
		
		mostrarTiempoYPais(partida);
		
		botones.setLayout(new GridLayout(3,1));

		botones.add(bPrincipales.get(0));
		botones.add(bPrincipales.get(1));
		botones.add(bPrincipales.get(2));
		contentPane.add(botones, BorderLayout.CENTER);
		
		contentPane.validate();
		contentPane.repaint();
	}

	public void mostrarTiempoYPais(Partida partida) {
		Container contentPane = v.getContentPane();
		contentPane.remove(textoSuperior);
		
		textoSuperior = new JPanel();
		JPanel txtTiempo = this.obtenerJPanelTiempo(partida);
		JPanel txtPais = this.obtenerJPanelInfoPais(partida);
		
		textoSuperior.add(txtTiempo);
		textoSuperior.add(txtPais);
		
		contentPane.add(textoSuperior, BorderLayout.NORTH);
		
		contentPane.validate();
		contentPane.repaint();	
		
	}

	private JPanel obtenerJPanelInfoPais(Partida partida) {
		

		Pais paisActual = partida.obtenerUbicacionJugador();
		
		JPanel panel = new JPanel();
		JLabel tPais = new JLabel("Pais actual: " + paisActual.obtenerNombre());
		
		panel.add(tPais);
		return panel;
		
	}

	private JPanel obtenerJPanelTiempo(Partida partida) {

		int[] diaYHora = partida.obtenerDiaYHora();
	
		JPanel panel = new JPanel();
		JLabel tTiempo = new JLabel("Dia: " + diaYHora[0] +", Hora: " + diaYHora[1] +"hs.");
		
		panel.add(tTiempo);
		return panel;
		
	}

	@Override
	public void mostrarOpcionesInterpol(Partida partida) {
	Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(7,1));
		

		botones.add(bInterpol.get(0));
		botones.add(bInterpol.get(1));
		botones.add(bInterpol.get(2));
		botones.add(bInterpol.get(3));
		botones.add(bInterpol.get(4));
		botones.add(bInterpol.get(5));
		botones.add(bInterpol.get(6));

		
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
	}

	@Override
	public void mostrarOpcionesSexo() {
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(2,1));
		


		botones.add(bSexo.get(0));
		botones.add(bSexo.get(1));
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
	}

	@Override
	public void mostrarOpcionesCabello() {
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(3,1));
		

		botones.add(bCabello.get(0));
		botones.add(bCabello.get(1));
		botones.add(bCabello.get(2));
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
	}

	@Override
	public void mostrarOpcionesHobby() {
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(3,1));
		


		botones.add(bHobby.get(0));
		botones.add(bHobby.get(1));
		botones.add(bHobby.get(2));
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();		
	}

	@Override
	public void mostrarOpcionesSenia() {
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(3,1));
		

		botones.add(bSenia.get(0));
		botones.add(bSenia.get(1));
		botones.add(bSenia.get(2));
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
	}

	@Override
	public void mostrarOpcionesVehiculo() {
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(3,1));
		

		botones.add(bVehiculo.get(0));
		botones.add(bVehiculo.get(1));
		botones.add(bVehiculo.get(2));
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();		
	}

	@Override
	public void mostrarListaDeSospechosos(Sospechoso[] lista) {
		
		Container contentPane = v.getContentPane();
		contentPane.remove(textoCentral);
		
		textoCentral = new JPanel();
		textoCentral.setLayout(new GridLayout(lista.length+1, 1));
		
		
		if (lista.length != 0)
		{
			textoCentral.add(new JLabel("Los siguientes sospechosos poseen las caracteristicas seleccionadas:", JLabel.CENTER));
			
			System.out.println("Deberia mostrar una lista"); //DEBUG


			for (Sospechoso sospechoso : lista)
				textoCentral.add(new JLabel(sospechoso.nombre(), JLabel.CENTER));
		}
		else
			
			textoCentral.add(new JLabel("Ningun sospechoso coincide con el perfil buscado.", JLabel.CENTER));
		
		
		
		contentPane.add(textoCentral, BorderLayout.CENTER);
		contentPane.validate();
		contentPane.repaint();		
		
	}

	@Override
	public void mostrarOpcionesInvestigacion(Partida partida) {
		

		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
        

		botones = new JPanel();
		botones.setLayout(new GridLayout(4,1));
		

		botones.add(bInvestigacion.get(0));
		botones.add(bInvestigacion.get(1));
		botones.add(bInvestigacion.get(2));
		botones.add(bInvestigacion.get(3));
		
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
		
	}

	@Override
	public void mostrarOpcionesViajar(Partida partida) {
		
		Container contentPane = v.getContentPane();
		
		contentPane.remove(botones);
		
		botones = new JPanel();
		botones.setLayout(new GridLayout(4,1));
		
		List<Integer> lista = GeneradorAleatorio.generarNValoresAleatorios(4, 4); //Randomizamos el orden de los botones
		
	
		botones.add(bViajar.get(lista.get(0)));
		botones.add(bViajar.get(lista.get(1)));
		botones.add(bViajar.get(lista.get(2)));
		botones.add(bViajar.get(lista.get(3)));
		
		
		contentPane.add(botones, BorderLayout.SOUTH);
		contentPane.validate();
		contentPane.repaint();
		
	}

	@Override
	public void mostrarPaisActual(Partida partida) {

		Container contentPane = v.getContentPane();
		contentPane.remove(textoSuperior);
		
		Pais paisActual = partida.obtenerUbicacionJugador();
		
		JPanel textoSuperior = new JPanel();
		JLabel tPais = new JLabel("Pais actual: " + paisActual.obtenerNombre());
		
		textoSuperior.add(tPais);
		
		contentPane.add(textoSuperior, BorderLayout.NORTH);
		
		contentPane.validate();
		contentPane.repaint();
		
		
	}

	@Override
	public void mostrarPista(String pista) {

		Container contentPane = v.getContentPane();
		contentPane.remove(textoCentral);

		
		JLabel label = new JLabel(pista);
		textoCentral = new JPanel();
		textoCentral.add(label);
		
		contentPane.add(textoCentral, BorderLayout.CENTER);
		
		contentPane.validate();
		contentPane.repaint();
		


	}

	@Override
	public void mostrarFinPartida() {
//		
//		Container contentPane = v.getContentPane();
//		contentPane.removeAll();
//		
//		JLabel l = new JLabel("Se acabo la partida. Desea volver a jugar?", JLabel.CENTER);
//		
//		
//		botones = new JPanel();
//		botones.setLayout(new GridLayout(2,1));
//		
//		botones.add(bFinPartida.get(0));
//		botones.add(bFinPartida.get(1));
//
//		
//		contentPane.add(l, BorderLayout.CENTER);
//		contentPane.add(botones,  BorderLayout.SOUTH);
//		
//		contentPane.validate();
//		contentPane.repaint();
		
		
		mostrarPopUpFinDePartida();
		

		Container contentPane = popUp.getContentPane();
		contentPane.removeAll();
		
		

		JLabel l = new JLabel("Se acabo la partida. Desea volver a jugar?", JLabel.CENTER);
		botones = new JPanel();
		botones.setLayout(new GridLayout(2,1));
	

		botones.add(bFinPartida.get(0));
		botones.add(bFinPartida.get(1));
		
		contentPane.add(l, BorderLayout.CENTER);
		contentPane.add(botones,  BorderLayout.SOUTH);
		
		contentPane.validate();
		contentPane.repaint();
		
				
	}
	

	public void mostrarBotonOK(JButton botonOK)
	{
		v.getContentPane().add(botonOK, BorderLayout.CENTER);
		v.getContentPane().validate();
		v.getContentPane().repaint();
	}



	public void setearBotonesPrincipales(List<JButton> bP) {

		bPrincipales = bP;
	}

	public void setearBotonesInvestigacion(List<JButton> bI) {
		
		bInvestigacion = bI;
	}
	
	public void setearBotonesInterpol(List<JButton> bIn) {
		
		bInterpol = bIn;
	}
	
	public void setearBotonesViajar(List<JButton> bV) {
		
		bViajar = bV;
	}

	public void setearBotonesSexo(List<JButton> bS) {
		 bSexo = bS;
		
	}

	public void setearBotonesHobby(List<JButton> bH) {
		bHobby = bH;
		
	}

	public void setearBotonesSenia(List<JButton> bS) {
		bSenia = bS;
	}

	public void setearBotonesVehiculo(List<JButton> bV) {
		bVehiculo = bV;
		
	}

	public void setearBotonesFinDePartida(List<JButton> bFP) {
		
		System.out.println("Seteo los botones FP");
		bFinPartida = bFP;
		
	}

	public void setearBotonesCabello(List<JButton> bC) {
		bCabello = bC;
		
	}

	public void setearBotonOK(JButton b) {
		bOK = b;
		
	}
	
	public void setearBotonJugar(JButton b) {
		bJugar = b;
		
	}

	public String obtenerTextField() {
		return textFieldJugador.getText();
	}

}
